package acm.pta11;

import java.util.Scanner;

public class 完全二叉树的层序遍历 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n = sc.nextInt();
        postOrder=new int[n];
        levelOrder=new int[n+1];
        for (int i = 0; i < postOrder.length; i++) {
            postOrder[i]=sc.nextInt();
        }
        builder(1);
        StringBuilder sb=new StringBuilder();
        for (int i = 1; i < levelOrder.length; i++) {
            sb.append(levelOrder[i]).append(" ");
        }
        sb.deleteCharAt(sb.length()-1);
        System.out.println(sb.toString());
    }

    static int[] postOrder; // 后序遍历结果数组
    static int[] levelOrder; // 层序遍历结果数组
    static int count=0; // 计数器，用于记录后序遍历结果的个数

    /**
     * todo：重点题
     * 完全二叉树后序遍历层序遍历
     * @param i:层序遍历中父节点的位置。
     */
    public static void builder(int i) {
        int left=i<<1; // 左子节点的位置
        int right=i<<1|1; // 右子节点的位置
        if (left<levelOrder.length){ // 如果左子节点存在
            builder(left); // 递归调用后序遍历
        }
        if (right<levelOrder.length){ // 如果右子节点存在
            builder(right); // 递归调用后序遍历
        }
        levelOrder[i]=postOrder[count++]; //将左树和右树遍历完成后，count位置就是头位置
    }
}
